﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DiveManager
{
    public partial class AirFill : Form
    {
        protected DiveDatabaseEntities diveDatabase;
        
        public string fuellung;
        public string abrechnung="Privat";
        public string kundenname;
        public int kdnr=0;
        public int kursnr=0;
        public int dsdnr=0;
        public int kurs=0;
        public int verein=0;
        public int dsd = 0;
        public int staff;
        public int flasche=0;
        public int menge=0;
        public int mischung=0;
        public DateTime date;
        public int fuellnummer_neu;
        public double preis = 0;
        public string person;
        public string vorname;
        public string nachname;
        public string firma;

        Guid guid = System.Guid.NewGuid();
        Guid kompguid = System.Guid.NewGuid();



        
        public AirFill()
        {
            InitializeComponent();

            // Init Database
            diveDatabase = new DiveDatabaseEntities();
        }

        private void btChooseCustomer_Click(object sender, EventArgs e)
        {
            //Öffnen des Kundensuchhen Fensters 
            //Rückgabe der Kundennummer
            //Suchen des Kundennamen in DB anhand KDNR
            //KDNR in variable kdnr eintragen
            //Eintragen des Kundennamen in txKunde
            //Eintragen des Kundennamen in txShowKunde

            KundensucheEinfach kundensucheeinfach = new KundensucheEinfach();
            kundensucheeinfach.ShowDialog();

            kdnr = kundensucheeinfach.kdnr;
            txShowKDNR.Text = kdnr.ToString();

            //btKundeOK sichtbar machen
            btKundeOK.Visible = true;

            Kundendaten();
        }

        private void btPressluft_Click(object sender, EventArgs e)
        {
            //Setzt die Füllung auf Pressluft
            fuellung = "Pressluft";
            preis = 0;

            //Ändern der Buttonfarben
            this.btPressluft.BackColor = System.Drawing.Color.LimeGreen;
            this.btNitrox.BackColor = System.Drawing.Color.Red;

            btFillOK.Visible = true;
            preis = 3.5;
        }

        private void btNitrox_Click(object sender, EventArgs e)
        {
            //Setzt die Füllung auf Nitrox
            fuellung = "Nitrox";
            preis = 0;

            //Ändern der Buttonfarben
            this.btPressluft.BackColor = System.Drawing.Color.Red;
            this.btNitrox.BackColor = System.Drawing.Color.LimeGreen;

            btFillOK.Visible = true;
            preis = 5;

        }

        private void btChooseAbrechnung_Click(object sender, EventArgs e)
        {
            //Abrechnungsart auswählen
            //Standartmäßig auf Privat gesetzt
        }

        private void AirFill_Load(object sender, EventArgs e)
        {
            //Standartwert für die Abrechnung setzen
            this.btPrivat.BackColor = System.Drawing.Color.LimeGreen;
            this.btVerein.BackColor = System.Drawing.Color.Red;
            this.btKurs.BackColor = System.Drawing.Color.Red;
            this.btDSD.BackColor = System.Drawing.Color.Red;
            this.btStaff.BackColor = System.Drawing.Color.Red;

            date = System.DateTime.Now;



            //Nächste freie Füllnummer aus Tabelle 
            var maxFuellnummer = (from a in diveDatabase.FlaschenFuellung
                                select a.Fuellnummer).Max();


            label8.Visible = true;
            label8.Text = maxFuellnummer.ToString();

            //Generieren einer neuen Fuellnummer 
            
            int fuellnummer_alt = Convert.ToInt32(label8.Text);
            fuellnummer_neu = fuellnummer_alt + 1;
            label8.Visible = false;

        }

        private void btPrivat_Click(object sender, EventArgs e)
        {
            //Setzten der Abrechnungsart auf Privat
            abrechnung = "Privat";
            this.btPrivat.BackColor = System.Drawing.Color.LimeGreen;
            this.btVerein.BackColor = System.Drawing.Color.Red;
            this.btKurs.BackColor = System.Drawing.Color.Red;
            this.btDSD.BackColor = System.Drawing.Color.Red;
            this.btStaff.BackColor = System.Drawing.Color.Red;

            verein = 0;
            kurs = 0;
            dsd = 0;
            staff = 0;
        }

        private void btVerein_Click(object sender, EventArgs e)
        {
            //Setzten der Abrechnungsart auf Verein
            abrechnung = "Verein";
            this.btVerein.BackColor = System.Drawing.Color.LimeGreen;
            this.btPrivat.BackColor = System.Drawing.Color.Red;
            this.btKurs.BackColor = System.Drawing.Color.Red;
            this.btDSD.BackColor = System.Drawing.Color.Red;
            this.btStaff.BackColor = System.Drawing.Color.Red;

            //Verein auf true, also 1 setzen;
            verein = 1;
            kurs = 0;
            dsd = 0;
            staff = 0;
        }

        private void btKurs_Click(object sender, EventArgs e)
        {
            //Setzten der Abrechnungsart auf Kurs
            abrechnung = "Kurs";
            this.btKurs.BackColor = System.Drawing.Color.LimeGreen;
            this.btPrivat.BackColor = System.Drawing.Color.Red;
            this.btVerein.BackColor = System.Drawing.Color.Red;
            this.btDSD.BackColor = System.Drawing.Color.Red;
            this.btStaff.BackColor = System.Drawing.Color.Red;

            kurs = 1;
            verein = 0;
            dsd = 0;
            staff = 0;

            //Öffnen des Auswahlfensters zur angabe des Kurses
            //kursnummer in kursnr spreichern
        }

        private void btDSD_Click(object sender, EventArgs e)
        {
            //Setzten der Abrechnungsart auf DSD
            abrechnung = "DSD";
            this.btDSD.BackColor = System.Drawing.Color.LimeGreen;
            this.btPrivat.BackColor = System.Drawing.Color.Red;
            this.btVerein.BackColor = System.Drawing.Color.Red;
            this.btKurs.BackColor = System.Drawing.Color.Red;
            this.btStaff.BackColor = System.Drawing.Color.Red;

            verein = 0;
            kurs = 0;
            dsd = 1;
            staff = 0;
            

            //Öffnen des Auswahlfensters zur angabe des DSD
            //dsd nummer in dsdnr speichern
        }

        private void btStaff_Click(object sender, EventArgs e)
        {
            //Setzten der Abrechnungsart auf Staff
            abrechnung = "Staff";
            this.btStaff.BackColor = System.Drawing.Color.LimeGreen;
            this.btPrivat.BackColor = System.Drawing.Color.Red;
            this.btVerein.BackColor = System.Drawing.Color.Red;
            this.btKurs.BackColor = System.Drawing.Color.Red;
            this.btDSD.BackColor = System.Drawing.Color.Red;

            verein = 0;
            kurs = 0;
            dsd = 0;
            staff = 1;

        }

        private void bt5Liter_Click(object sender, EventArgs e)
        {
            //Füllmenge Pressluft auf 5 Liter setzen
        }

        private void btKeinKunde_Click(object sender, EventArgs e)
        {
            //Keinen Kunden zuordnen
            //btKundeOK sichbar machen
            btKundeOK.Visible = true;
            kdnr = 0;
            txShowKunde.Text = "kein Kunde";

        }

        private void btKundeOK_Click(object sender, EventArgs e)
        {
            //Kundendaten übernehmen

            txShowKDNR.Text = kdnr.ToString();

            //GroupBox Abrechnung sichbar machen
            groupBox1.Visible = true;

            //GrupbBoxKunde ausblenden
            groupBoxKunde.Enabled = false;



           
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void btAbrechnungOK_Click(object sender, EventArgs e)
        {
            groupBox1.Enabled = false;
            txShowAbrechnung.Text = abrechnung;

            if (verein == 1)
            {
                txShowAbrechnungsDetails.Text = "ist Verein";
            }

            if (kurs == 1)
            {
                txShowAbrechnungsDetails.Text = "ist Kurs XYZ";
                //Zusätzliche ausgabe der Kursbezeichnung
            }

            if (dsd == 1)
            {
                txShowAbrechnungsDetails.Text = "ist DSD XYZ";
                //Zusätzliche Ausgabe des DSD Kurses
            }

            if (staff == 1)
            {
                txShowAbrechnungsDetails.Text = "ist Staff XYZ";
                //Zusätzliche Ausgabe der Staffnummer
            }

            groupBox2.Visible = true;
        }

        private void btFillOK_Click(object sender, EventArgs e)
        {
            txShowFill.Text = fuellung;

            groupBox2.Enabled = false;
            groupBox3.Visible = true;
        }

        private void btMengeOK_Click(object sender, EventArgs e)
        {
            //Auslesen der Textfelder Flasche und Menge
            //Speichern in Variablen
            if (txFlasche.Equals(""))
            {
                MessageBox.Show("Bitte Flaschengröße eingeben");
            }
            else
            {
                if (txMenge.Equals(""))
                {
                    MessageBox.Show("Bitte Menge eingeben");
                }
                else
                {
                    flasche = Convert.ToInt32(txFlasche.Text);
                    menge = Convert.ToInt32(txMenge.Text);
                }
            }

            //Schreiben der Flasche in txShowFlasche
            txShowFlasche.Text = flasche.ToString()+" Liter";
            //Schreiben der Menge in txShowMenge
            txShowMenge.Text = menge.ToString()+"  Stück";

            //Groubox ausblenden
            groupBox3.Enabled = false;

            if (fuellung.Equals("Pressluft"))
            {
                //Direkter Sprung zur Datenprüfung und zur Abrechnung
                txShowMischung.Text = "-";
                mischung = 0;

                if (abrechnung.Equals("Privat"))
                {
                    //Auf Rechnung einblenden lassen
                    btRechnung.Visible = true;
                    //Nur abschließen einblenden
                    btAbschließen.Visible = true;
                }
                if (abrechnung.Equals("Verein"))
                {
                    //Auf Rechnung einblenden lassen
                    btRechnung.Visible = true;
                }
                if (abrechnung.Equals("Kurs"))
                {
                    //Nur abschließen einblenden
                    btAbschließen.Visible = true;
                }
                if (abrechnung.Equals("DSD"))
                {
                    //Nur abschließen einblenden
                    btAbschließen.Visible = true;
                }
                if (abrechnung.Equals("Staff"))
                {
                    //Auf Rechnung einblenden lassen
                    btRechnung.Visible = true;
                    //Nur abschließen einblenden
                    btAbschließen.Visible = true;
                }



            }

            if (fuellung.Equals("Nitrox"))
            {
                //Einblenden der groupBox4 zur Angabe der Mischung
                groupBox4.Visible = true;
            }
        }

        private void btMischungOK_Click(object sender, EventArgs e)
        {
            if (txMischung.Equals(""))
            {
                MessageBox.Show("Bitte Suaerstoffanteil eingeben");
            }
            else
            {
                mischung = Convert.ToInt32(txMischung.Text);
                txShowMischung.Text = mischung.ToString();
            }


            groupBox4.Enabled = false;

            if (abrechnung.Equals("Privat"))
            {
                //Auf Rechnung einblenden lassen
                btRechnung.Visible = true;
                //Nur abschließen einblenden
                btAbschließen.Visible = true;
            }
            if (abrechnung.Equals("Verein"))
            {
                //Auf Rechnung einblenden lassen
                btRechnung.Visible = true;
            }
            if (abrechnung.Equals("Kurs"))
            {
                //Nur abschließen einblenden
                btAbschließen.Visible = true;
            }
            if (abrechnung.Equals("DSD"))
            {
                //Nur abschließen einblenden
                btAbschließen.Visible = true;
            }
            if (abrechnung.Equals("Staff"))
            {
                //Auf Rechnung einblenden lassen
                btRechnung.Visible = true;
                //Nur abschließen einblenden
                btAbschließen.Visible = true;
            }
        }

        private void btAbbrechen_Click(object sender, EventArgs e)
        {
            //Von vorne
            //Restart

            // Open AirFill
            AirFill AirFill = new AirFill();
            AirFill.Show();

            this.Close();

        }

        private void btAbschließen_Click(object sender, EventArgs e)
        {
            //OHNE RECHNUNG
            
            //Abschließen der Dateneingabe

            //--Schreiben in DB Flaschenfüllungen--
            //fuelnummer aus DB holen
            //fuellung
            //abrechnung
            //kdnr
            //kursnr
            //DSDnr
            //flasche
            //menge
            //mischung
            //datum
            //Gefüllt von

            //In die Tabelle FlaschenFuellung schreiben
            // Generate new Object for DB
            FlaschenFuellung flaflue = new FlaschenFuellung();
            flaflue.ID = guid;
            flaflue.Fuellnummer = fuellnummer_neu;
            flaflue.Fuellung = fuellung;
            flaflue.Abrechnung = abrechnung;
            flaflue.KDNR = kdnr;
            flaflue.Kurs = kursnr;
            flaflue.DSD = dsdnr;
            flaflue.Flasche = flasche;
            flaflue.Menge = menge;
            flaflue.Mischung = mischung;
            flaflue.Date = date;
            flaflue.User = 9999;
            // Add to DB
            diveDatabase.AddToFlaschenFuellung(flaflue);
            diveDatabase.SaveChanges();

            //Schreiben in die Datenbank KompressorReport
            KompressorReport komprep = new KompressorReport();
            komprep.ID = kompguid;
            komprep.Vorgang = "Flaschenfüllung";
            komprep.Fuellnummer = fuellnummer_neu;
            komprep.Date = date;
            komprep.User = 9999;
            // Add to DB
            diveDatabase.AddToKompressorReport(komprep);
            diveDatabase.SaveChanges();
           
            //Schreiben in Reporting
            ReportingMain report = new ReportingMain();
            report.ID = System.Guid.NewGuid();
            report.Report_Text = "Flaschenfüllung abgeschlossen";
            report.Sortierung = 2001;
            report.Objekt = fuellnummer_neu.ToString();
            // Add to DB
            diveDatabase.AddToReportingMain(report);
            diveDatabase.SaveChanges();

            MessageBox.Show("Vorgang abgeschlossen!");

            Close();

            
        }

        private void btRechnung_Click(object sender, EventArgs e)
        {
            //MIT RECHNUNG

            //In die Tabelle FlaschenFuellung schreiben
            // Generate new Object for DB
            FlaschenFuellung flaflue = new FlaschenFuellung();
            flaflue.ID = guid;
            flaflue.Fuellnummer = fuellnummer_neu;
            flaflue.Fuellung = fuellung;
            flaflue.Abrechnung = abrechnung;
            flaflue.KDNR = kdnr;
            flaflue.Kurs = kursnr;
            flaflue.DSD = dsdnr;
            flaflue.Flasche = flasche;
            flaflue.Menge = menge;
            flaflue.Mischung = mischung;
            flaflue.Date = date;
            flaflue.User = 9999;
            // Add to DB
            diveDatabase.AddToFlaschenFuellung(flaflue);
            diveDatabase.SaveChanges();

            //Schreiben in die Datenbank KompressorReport
            KompressorReport komprep = new KompressorReport();
            komprep.ID = kompguid;
            komprep.Vorgang = "Flaschenfüllung";
            komprep.Fuellnummer = fuellnummer_neu;
            komprep.Date = date;
            komprep.User = 9999;
            // Add to DB
            diveDatabase.AddToKompressorReport(komprep);
            diveDatabase.SaveChanges();

            //Schreiben in Reporting
            ReportingMain report = new ReportingMain();
            report.ID = System.Guid.NewGuid();
            report.Report_Text = "Flaschenfüllung abgerechnet";
            report.Sortierung = 2002;
            report.Objekt = fuellnummer_neu.ToString();
            // Add to DB
            diveDatabase.AddToReportingMain(report);
            diveDatabase.SaveChanges();

            //Schreiben in RechnungWarteschleife
            RechnungWarteschleife rewa = new RechnungWarteschleife();
            rewa.ID = System.Guid.NewGuid();
            rewa.Bezeichnung = "Flaschenfüllung";
            rewa.Beschreibung = flasche + "Liter Füllung;" + fuellung + mischung;
            rewa.KDNR = kdnr;
            //Einfügen der UserNr
            rewa.User = 0;
            rewa.Preis = preis;
            rewa.Date = date;
            rewa.Menge = menge;
            rewa.Gesamtpreis = menge * preis;
            // Add to DB
            diveDatabase.AddToRechnungWarteschleife(rewa);
            diveDatabase.SaveChanges();

            MessageBox.Show("Vorgang wurde der Rechnungswarteschleife hinzugefügt!");

            Close();
        }

        private void btKundenkarte_Click(object sender, EventArgs e)
        {
            KundenkarteSuche kundenskarte = new KundenkarteSuche();
            kundenskarte.ShowDialog();

            kdnr = kundenskarte.kdnr;
            txShowKDNR.Text = kdnr.ToString();

            Kundendaten();
        }

        private void Kundendaten()
        {
            var Customer_MainPerson = from cm in diveDatabase.Customer_Main
                                      where cm.KDNR == kdnr
                                      select cm;

            foreach (var cm in Customer_MainPerson)
            {
                person = cm.Person;
            }

            if (person.Equals("einzelperson"))
            {
               
                //Auslesen der Daten aus Customer Main
                var Customer_Main = from cm in diveDatabase.Customer_Main
                                    where cm.KDNR == kdnr
                                    select cm;

                foreach (var cm in Customer_Main)
                {
                    vorname = cm.Vorname;
                    nachname = cm.Name;
                    txKunde.Text = vorname + " " + nachname;
                    txShowKunde.Text = vorname + " " + nachname;
                }
            }

            if (person.Equals("firma"))
            {
                //Auslesen der Daten aus Customer Main
                var Customer_Main = from cm in diveDatabase.Customer_Main
                                    where cm.KDNR == kdnr
                                    select cm;

                foreach (var cm in Customer_Main)
                {
                    firma = cm.Firma;
                    txKunde.Text = firma;
                    txShowKunde.Text = firma;
                }
            }
        }
    }
}
